/**
 * 微信登录页面
 * /pages/login/index
 * @author WeChat Mini Program Team
 * @since 2025-08-15
 */

const Router = require('../../utils/router')
const Storage = require('../../utils/storage')
const Logger = require('../../utils/logger')
const Track = require('../../utils/track')
const { UserService } = require('../../services/index')

Page({
  /**
   * 页面的初始数据
   */
  data: {
    title: '微信登录',
    loginLoading: false,
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
    Logger.info('Page loaded: /pages/login/index', options)
    Track.trackPageView('/pages/login/index', options)
    
    // 检查用户是否已经登录
    this.checkLoginStatus()
  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {
    // 页面显示时的逻辑
  },

  /**
   * 检查登录状态
   */
  checkLoginStatus() {
    const token = Storage.get('access_token')
    if (token) {
      // 用户已登录，跳转到首页
      Router.switchTab('/pages/home/index')
    }
  },

  /**
   * 微信登录
   */
  async onWechatLogin() {
    console.log('微信登录按钮被点击');

    if (this.data.loginLoading) return
    
    try {
      this.setData({ loginLoading: true })
      Track.trackClick('wechat_login', 'auth')

      // 1. 调用微信登录
      const loginRes = await this.wxLogin()
      
      // 2. 调用后端接口进行登录
      const loginData = await this.callLoginAPI(loginRes.code)
      
      // 3. 保存登录信息
      await this.saveLoginData(loginData)
      
      // 4. 登录成功提示
      wx.showToast({
        title: loginData.is_new_user ? '注册成功' : '登录成功',
        icon: 'success'
      })
      
      // 5. 跳转到首页
      setTimeout(() => {
        Router.switchTab('/pages/home/index')
      }, 1500)
      
    } catch (error) {
      Logger.error('Wechat login failed', error)
      Track.trackError('wechat_login_failed', error.message)
      
      wx.showToast({
        title: error.message || '登录失败，请重试',
        icon: 'none'
      })
    } finally {
      this.setData({ loginLoading: false })
    }
  },

  /**
   * 微信授权登录
   */
  wxLogin() {
    return new Promise((resolve, reject) => {
      wx.login({
        success: (res) => {
          if (res.code) {
            resolve(res)
          } else {
            reject(new Error('获取微信授权码失败'))
          }
        },
        fail: (err) => {
          reject(new Error(err.errMsg || '微信登录失败'))
        }
      })
    })
  },

  /**
   * 调用后端登录接口
   */
  async callLoginAPI(code) {
    try {
      const response = await UserService.wechatLogin({ code })
      
      if (response.code === 200) {
        return response.data
      } else {
        throw new Error(response.message || '登录接口调用失败')
      }
    } catch (error) {
      throw new Error(error.message || '网络请求失败')
    }
  },

  /**
   * 保存登录数据到本地存储
   */
  async saveLoginData(loginData) {
    try {
      // 保存token信息
      Storage.set('access_token', loginData.token)
      Storage.set('refresh_token', loginData.refresh_token)
      Storage.set('token_expires_in', loginData.expires_in)
      Storage.set('token_created_at', Date.now())
      
      // 保存用户信息
      Storage.set('user_info', loginData.user)
      Storage.set('is_new_user', loginData.is_new_user)
      
      Logger.info('Login data saved', loginData.user)
    } catch (error) {
      throw new Error('保存登录信息失败')
    }
  },

  /**
   * 隐私政策点击
   */
  onPrivacyTap() {
    Track.trackClick('privacy_policy', 'link')
    wx.showModal({
      title: '隐私政策',
      content: '我们会保护您的隐私信息，详情请查看完整版隐私政策。',
      showCancel: false
    })
  },

  /**
   * 用户协议点击
   */
  onTermsTap() {
    Track.trackClick('terms_of_service', 'link')
    wx.showModal({
      title: '用户协议',
      content: '使用本服务即表示您同意遵守用户协议，详情请查看完整版用户协议。',
      showCancel: false
    })
  }
})